public class Test2 {
    //leetcode 376 摆动序列
    public int wiggleMaxLength(int[] nums) {
        //f表表示以i位置为结尾的上升状态的所有子序列中为摆动序列的最长子序列的长度
        //g表表示以i位置为结尾的下降状态的所有子序列中为摆动序列的最长子序列的长度
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];
        for (int i = 0; i < n; i++) f[i] = g[i] = 1;
        int ret = 1;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) {
                    f[i] = Math.max(g[j] + 1,f[i]);
                }else if (nums[i] < nums[j]) {
                    g[i] = Math.max(f[j] + 1,g[i]);
                }
                ret = Math.max(Math.max(f[i],g[i]),ret);
            }
        }
        return ret;
    }
}
